
# 重写jwt返回结果方法
import re

from django.contrib.auth.backends import ModelBackend

from users.models import User

def jwt_response_payload_handler(token,user=None,request=None):
    '''自定义jwt认证成功返回数据'''

    return {
        'token':token,
        'user_id':user.id,
        'username':user.username
    }


def get_user_by_account(account):
    '''
        根据账号获取用户对象，选择可以是用户名，可以是手机号

    :param account: 选择可以是用户名，可以是手机号
    :return: User对象或者None
    '''
    try:
        if re.match('^1[3-9]\d{9}$',account):
            # 手机号为账号
            user = User.objects.get(mobile=account)
        else:
            # 用户名为手机号
            user = User.objects.get(username=account)

    except User.DoesNotExist:
        return None

    else:
        return user

# 重写 authenticate 方法
class UserNameMobileAuthBackend(ModelBackend):
        '''自定义用户名或手机号认定'''
        def authenticate(self, request, username=None, password=None, **kwargs):
            user = get_user_by_account(username)
            if user is not None and user.check_password(password):

                return user


